使用ncnn在树莓派4B上部署nanoDet |
您所在的位置:网站首页 › python ncnn › 使用ncnn在树莓派4B上部署nanoDet |
使用ncnn在树莓派4B上部署nanoDet-m网络(12fps) - part 1
![]() title: “使用ncnn在树莓派4B上部署nanoDet-m网络(12fps)”date: 2023-03-05permalink: /posts/2023/03/blog-post-1/tags: nanoDet 树莓派 模型部署与落地1. 背景 在机器人的应用中,目标检测是一个重要的课题。深度学习的快速发展,在检测的效果方面对比大多数传统检测算法,都有明显的优势。但是将深度学习模型部署到端侧设备上,实现高效的推理,同样是一个问题很多的领域。 在机器人的主控中,树莓派和Jetson系列单板机被使用较多。这篇blog以树莓派4b为例,展示将深度学习模型部署到低算力平台的方法。 与深度学习在GPU上的推理不同,为了实现高效推理,一般都会选择使用推理框架,而不是直接使用python的推理代码进行推理。在CPU侧,常用的推理框架有ncnn、mnn、openvino等;在GPU侧,有tensorrt;高通在htp上,同样有snpe和qnn等推理框架。本blog使用树莓派的CPU进行推理,使用ncnn作为推理框架。 2. 效果 下图所示是在树莓派4b上推理nanoDet-m网络的结果。 图中的两个场景,在被检测目标较为密集的场合,检测算法也能达到11fps,且识别率很高。 除了网络的树莓派端侧推理结果之外,我还统计了一些在推理时,树莓派的相关信息。 将树莓派超频后,推理1分钟多的视频,平均fps可达11.4,最高可达12fps。且温度在合理的范围内。超频后,功耗比不超频状态下多了2.1w左右。 工作状态 CPU频率(Hz) CPU温度(℃) GPU频率(Hz) GPU温度(℃) 功耗 内存占用(with desktop) 平均fps 无作业 600M 34 200M 33.6 3.135w 318M 无 推理nanoDet-m 1.5G 43 500M 42 5.357w 494M 10.3fps 推理nanoDet-m(超频) 2.0G 51.2 700M 52.6 7.446w 446M 11.4fps下图是我使用的功耗测试仪 3.nanoDet-m网络 如下图所示是这次要部署的网络,下图仅截取了部分backbone和部分heads网络。 下表是以YOLOv4 tiny作为对比对象的数据。nanoDet-m实现了在较低的FLOPs和params的情况下,得到了不错的mAP值,是一个非常适合端侧低算力设备推理的网络结构。 Model backbone resolution COCO mAP FLOPs params NanoDet-m ShuffleNetV2 1.0x 320*320 20.6 0.72G 0.95M YOLOv4 tiny CSPDarknet53 416x416 21.7 6.5B 3.1M4. 我的树莓派信息 硬件: 树莓派4b、2G RAM、32G ROM、荣耀平板8充电头供电、全套散热装,如下图 软件:raspberry OS、上游分支Debian GNU/Linux 11 (bullseye)。 5. ncnn推理相关软件安装 下面介绍在树莓派4b端侧推理nanoDet-m网络,需要安装的组件以及安装方法。 5.1 安装ncnn 执行uname -a,确保是aarch64架构的系统。 执行如下安装指令 # check for updates sudo apt-get update sudo apt-get upgrade # install dependencies sudo apt-get install cmake wget sudo apt-get install build-essential gcc g++ sudo apt-get install libprotobuf-dev protobuf-compiler # download ncnn git clone --depth=1 https://github.com/Tencent/ncnn.git # install ncnn cd ncnn mkdir build cd build # build 64-bit ncnn cmake -D NCNN_DISABLE_RTTI=OFF -D NCNN_BUILD_TOOLS=ON \ -D CMAKE_TOOLCHAIN_FILE=../toolchains/aarch64-linux-gnu.toolchain.cmake .. make -j4 make install # copy output to dirs sudo mkdir /usr/local/lib/ncnn sudo cp -r install/include/ncnn /usr/local/include/ncnn sudo cp -r install/lib/libncnn.a /usr/local/lib/ncnn/libncnn.a在~/ncnn/build/install/bin文件夹下,有很多转换模型的工具,这在我们后面的博客中会用得到,将onnx模型转换为ncnn支持的模型。 5.2 安装opencv4.5.5 (1)更新EEPROM树莓派4b支持更新EEPROM中的固件,可有效降低树莓派的运行温度。 sudo rpi-eeprom-update sudo rpi-eeprom-update -a sudo reboot(2) 源码编译安装opencv 不要使用pip或者apt安装opencv,这两种方式不能保证是64bit版本的,性能不能充分在树莓派上发挥出来。 在Preferences -> Raspberry Pi Configuration -> Performance -> GPU Memory设置项中,给GPU分配至少128M显存。 执行以下命令安装 # check for updates sudo apt-get update sudo apt-get upgrade # dependencies sudo apt-get install build-essential cmake git unzip pkg-config sudo apt-get install libjpeg-dev libpng-dev sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install libgtk2.0-dev libcanberra-gtk* libgtk-3-dev sudo apt-get install libgstreamer1.0-dev gstreamer1.0-gtk3 sudo apt-get install libgstreamer-plugins-base1.0-dev gstreamer1.0-gl sudo apt-get install libxvidcore-dev libx264-dev sudo apt-get install python3-dev python3-numpy python3-pip sudo apt-get install libtbb2 libtbb-dev libdc1394-22-dev sudo apt-get install libv4l-dev v4l-utils sudo apt-get install libopenblas-dev libatlas-base-dev libblas-dev sudo apt-get install liblapack-dev gfortran libhdf5-dev sudo apt-get install libprotobuf-dev libgoogle-glog-dev libgflags-dev sudo apt-get install protobuf-compiler下载opencv4.5.5的源码包 cd ~ # 如果网络连接失败,在其他电脑上访问这个网址下载好,再放到树莓派的 ~/ 目录下 wget -O opencv.zip https://github.com/opencv/opencv/archive/4.5.5.zip wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.5.5.zip unzip opencv.zip unzip opencv_contrib.zip mv opencv-4.5.5 opencv mv opencv_contrib-4.5.5 opencv_contrib在执行编译之前,如果是2G RAM的树莓派,需要扩容swap分区,大于2G RAM的版本可忽略此项。扩容swap方式(仅限2G RAM) 使用开源代码rpi_zram, 对swap进行扩容,按照github上的README操作就可以。 编译opencv4.5.5 cd ~/opencv mkdir build cd build cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \ -D ENABLE_NEON=ON \ -D WITH_OPENMP=ON \ -D WITH_OPENCL=OFF \ -D BUILD_TIFF=ON \ -D WITH_FFMPEG=ON \ -D WITH_TBB=ON \ -D BUILD_TBB=ON \ -D WITH_GSTREAMER=ON \ -D BUILD_TESTS=OFF \ -D WITH_EIGEN=OFF \ -D WITH_V4L=ON \ -D WITH_LIBV4L=ON \ -D WITH_VTK=OFF \ -D WITH_QT=OFF \ -D OPENCV_ENABLE_NONFREE=ON \ -D INSTALL_C_EXAMPLES=OFF \ -D INSTALL_PYTHON_EXAMPLES=OFF \ -D PYTHON3_PACKAGES_PATH=/usr/lib/python3/dist-packages \ -D OPENCV_GENERATE_PKGCONFIG=ON \ -D BUILD_EXAMPLES=OFF .. make -j4 sudo make install sudo ldconfig验证安装,进入python编程环境 import cv2 print(cv2.__version__)5.3 安装codeblocks 使用codeblocks在树莓派上进行开发。喜欢remote develop的也可以直接使用vscode的远程开发功能。 6. 推理通路代码 这部分内容,以及模型转换内容、树莓派超频等,我们留在下一节展开说明。 模型部署ncnn原创文章作者:bug404。如若转载,请注明出处:古月居 http://www.guyuehome.com/42221 打赏 0 点赞 0 收藏 0 分享 微信 微博 QQ 图片 上一篇:python中*号用法大全 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |